python: np.pad() 函数的用法

您所在的位置:网站首页 max函数 python python: np.pad() 函数的用法

python: np.pad() 函数的用法

2024-07-12 21:26| 来源: 网络整理| 查看: 265

在卷积神经网络中,为了避免因为卷积运算导致输出图像缩小和图像边缘信息丢失,常常采用图像边缘填充技术,即在图像四周边缘填充0,使得卷积运算后图像大小不会缩小,同时也不会丢失边缘和角落的信息。在Python的numpy库中,常常采用numpy.pad()进行填充操作,具体分析如下:

1. np.pad()函数

1)语法结构

pad(array, pad_width, mode, **kwargs)

返回值:数组

2)参数解释

array——表示需要填充的数组;

pad_width——表示每个轴(axis)边缘需要填充的数值数目。 参数输入方式为:((before_1, after_1), … (before_N, after_N)),其中(before_1, after_1)表示第1轴两边缘分别填充before_1个和after_1个数值。取值为:{sequence, array_like, int}

mode——表示填充的方式(取值:str字符串或用户提供的函数),总共有11种填充模式;

3) 填充方式

‘constant’——表示连续填充相同的值,每个轴可以分别指定填充值,constant_values=(x, y)时前面用x填充,后面用y填充,缺省值填充0

‘edge’——表示用边缘值填充

‘linear_ramp’——表示用边缘递减的方式填充

‘maximum’——表示最大值填充

‘mean’——表示均值填充

‘median’——表示中位数填充

‘minimum’——表示最小值填充

‘reflect’——表示对称填充

‘symmetric’——表示对称填充

‘wrap’——表示用原数组后面的值填充前面,前面的值填充后面

import numpy as np 1 1.1 常数填充模式——’constant’

在卷积神经网络中,通常采用constant填充方式!!

A = np.arange(95,99).reshape(2,2) #原始输入数组 A 12 array([[95, 96], [97, 98]]) 123 1.1.1 用例1 #在数组A的边缘填充constant_values指定的数值 #(3,2)表示在A的第[0]轴填充(二维数组中,0轴表示行),即在0轴前面填充3个宽度的0,比如数组A中的95,96两个元素前面各填充了3个0;在后面填充2个0,比如数组A中的97,98两个元素后面各填充了2个0 #(2,3)表示在A的第[1]轴填充(二维数组中,1轴表示列),即在1轴前面填充2个宽度的0,后面填充3个宽度的0 np.pad(A,((3,2),(2,3)),'constant',constant_values = (0,0)) #constant_values表示填充值,且(before,after)的填充值等于(0,0) 1234 array([[ 0, 0, 0, 0, 0, 0, 0], [ 0, 0, 0, 0, 0, 0, 0], [ 0, 0, 0, 0, 0, 0, 0], [ 0, 0, 95, 96, 0, 0, 0], [ 0, 0, 97, 98, 0, 0, 0], [ 0, 0, 0, 0, 0, 0, 0], [ 0, 0, 0, 0, 0, 0, 0]]) 12345678 #填充时,从前面轴,往后面轴依次填充 np.pad(A,((3,2),(2,3)),'constant',constant_values = (-2,2)) #填充值,前面填充改为-2,后面填充改为2 12 array([[-2, -2, -2, -2, 2, 2, 2], [-2, -2, -2, -2, 2, 2, 2], [-2, -2, -2, -2, 2, 2, 2], [-2, -2, 95, 96, 2, 2, 2], [-2, -2, 97, 98, 2, 2, 2], [-2, -2, 2, 2, 2, 2, 2], [-2, -2, 2, 2, 2, 2, 2]]) 12345678 np.pad(A,((3,2),(2,3)),'constant',constant_values = ((0,0),(1,2))) #0轴和1轴分别填充不同的值,先填充0轴,后填充1轴,存在1轴填充覆盖0轴填充的情形 1 array([[ 1, 1, 0, 0, 2, 2, 2], [ 1, 1, 0, 0, 2, 2, 2], [ 1, 1, 0, 0, 2, 2, 2], [ 1, 1, 95, 96, 2, 2, 2], [ 1, 1, 97, 98, 2, 2, 2], [ 1, 1, 0, 0, 2, 2, 2], [ 1, 1, 0, 0, 2, 2, 2]]) 12345678 np.pad(A,((3,2),(2,3)),'constant') #,constant_values 缺省,则默认填充均为0 1 array([[ 0, 0, 0, 0, 0, 0, 0], [ 0, 0, 0, 0, 0, 0, 0], [ 0, 0, 0, 0, 0, 0, 0], [ 0, 0, 95, 96, 0, 0, 0], [ 0, 0, 97, 98, 0, 0, 0], [ 0, 0, 0, 0, 0, 0, 0], [ 0, 0, 0, 0, 0, 0, 0]]) 12345678 1.2 边缘值填充模式——’edge’ B = np.arange(1,5).reshape(2,2) #原始输入数组 B 12 array([[1, 2], [3, 4]]) 123 np.pad(B,((1,2),(2,1)),'edge') #注意先填充0轴,后面填充1轴,依次填充 1 array([[1, 1, 1, 2, 2], [1, 1, 1, 2, 2], [3, 3, 3, 4, 4], [3, 3, 3, 4, 4], [3, 3, 3, 4, 4]]) 123456 1.3 边缘最大值填充模式——’maximum’ B = np.arange(1,5).reshape(2,2) #原始输入数组 B 12 array([[1, 2], [3, 4]]) 123 np.pad(B,((1,2),(2,1)),'maximum') #maximum填充模式还有其他控制参数,比如stat_length,详细见numpy库 1 array([[4, 4, 3, 4, 4], [2, 2, 1, 2, 2], [4, 4, 3, 4, 4], [4, 4, 3, 4, 4], [4, 4, 3, 4, 4]]) 123456 C = np.arange(0,9).reshape(3,3) #原始输入数组 C 12 array([[0, 1, 2], [3, 4, 5], [6, 7, 8]]) 1234 np.pad(C,((3,2),(2,1)),'maximum') 1

array([[8, 8, 6, 7, 8, 8], [8, 8, 6, 7, 8, 8], [8, 8, 6, 7, 8, 8], [2, 2, 0, 1, 2, 2], [5, 5, 3, 4, 5, 5], [8, 8, 6, 7, 8, 8], [8, 8, 6, 7, 8, 8], [8, 8, 6, 7, 8, 8]]) 123456789



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3